package com.web.kftsdk.entity;

import lombok.Data;
import org.hibernate.validator.constraints.NotBlank;

import java.util.Map;
import java.util.TreeMap;

/**
 * <p>Title: KppUnionReq</p>
 * <p>Description: TODO</p>
 *
 * @author xukk
 * @version 1.0
 * @date 2018/6/15
 */
@Data
public class KppUnionReq{
    /**
     * 参数名称:商户身份ID
     * 是否必须：否
     * 参数描述：签约快付通的唯一用户编号,最长20位纯数字组成的字符
     */
    @NotBlank
    private String merchantId;

    /**
     * 参数名称:二级商户ID
     * 是否必须：是
     * 参数描述：一级商户下的二级子商户号，调用“二级商户入驻接口”生成。
     */
    private String secMerchantId;

    /**
     * 参数名称:交易编号
     * 是否必须：否
     * 参数描述：用于标识商户发起的一笔交易
     */
    @NotBlank
    private String orderNo;

    /**
     * 参数名称:交易客户类型
     * 是否必须：否
     * 参数描述：真实发生交易的客户类型
     */
    @NotBlank
    private String customerType;

    /**
     * 参数名称:异步支付通知回调地址
     * 是否必须：否
     * 参数描述：必须可直接访问的url，不能携带参数。
     */
    @NotBlank
    private String notifyUrl;

    /**
     * 参数名称:商品ID
     * 是否必须：可空
     * 参数描述：此id为二维码中包含的商品ID，商户自行定义。
     */

    private String productId;

    /**
     * 参数名称:交易金额
     * 是否必须：否
     * 参数描述：此次交易的具体金额,单位:分,不支持小数点
     */
    @NotBlank
    private String amount;

    /**
     * 参数名称:币种
     * 是否必须：否
     * 参数描述：指定交易所使用的币种, 具体见第5.3.2章节
     */
    @NotBlank
    private String currency;

    /**
     * 参数名称:商品描述
     * 是否必须：否
     * 参数描述：简要概括此次交易的内容.可能会在用户App上显示
     */
    @NotBlank
    private String tradeName;

    /**
     * 参数名称:商品详情
     * 是否必须：可空
     * 参数描述：对商品的描述
     */
    private String remark;

    /**
     * 参数名称:商户方交易时间
     * 是否必须：否
     * 参数描述：此次交易在商户发发起的时间,注意此时间取值一般为商户方系统时间而非快付通生成此时间
     */
    @NotBlank
    private String tradeTime;

    /**
     * 参数名称:商品单价
     * 是否必须：可空
     * 参数描述：单位:分,不支持小数点规则：商品单价和商品数量和交易总金额不能同时存在。即如果存在交易总金额，就不能存在商品单价和商品数量。
     */
    private String singlePrice;

    /**
     * 参数名称:商品数量
     * 是否必须：可空
     * 参数描述：交易中商品的数量
     */
    private String quantity;

    /**
     * 参数名称:付款方信息
     * 是否必须：可空
     * 参数描述：在收银台显示付款方信息
     */
    private String payerCustName;

    /**
     * 参数名称:收款方信息
     * 是否必须：可空
     * 参数描述：在收银台显示收款方信息
     */
    private String payeeCustName;

    /**
     * 参数名称:支付渠道
     * 是否必须：否
     * 参数描述：如微信、支付宝等，具体见第5.3.1章节
     */
    private String bankNo;

    /**
     * 参数名称:商品展示URL
     * 是否必须：可空
     * 参数描述：收银台页面上，商户展示的超链接
     */
    private String showUrl;

    /**
     * 参数名称:商户logo的图片url
     * 是否必须：可空
     * 参数描述：在收银台页面，展示商户的logo，固定尺寸是42×41像素。如果超过尺寸，快付通会进行缩放。
     */
    private String merchantLogoUrl;

    /**
     * 参数名称:收银台样式
     * 是否必须：否
     * 参数描述：1：无logo版,2：个人版，3：商户版。商户需要确定付款方是个人还是商户，来选择收银台的样式。
     */
    @NotBlank
    private String cashierStyle;

    /**
     * 参数名称:是否分账
     * 是否必须：可空
     * 参数描述：是否分账交易，1：是;0：否。默认否。
     */
    private String isSplit;

    /**
     * 参数名称:分账详情
     * 是否必须：可空
     * 参数描述：如果是分账交易必填。示例：[{\"merchantId\":\"000010001000000161\",\"amount\":\"100\",\"remark\":\"有线电视费\"},
     */
    private String splitInfo;

    public Map toMap(){
        Map<String,String> map=new TreeMap<>();
        map.put("merchantId",merchantId);
        map.put("secMerchantId",secMerchantId);
        map.put("orderNo",orderNo);
        map.put("customerType",customerType);
        map.put("notifyUrl",notifyUrl);
        map.put("productId",productId);
        map.put("amount",amount);
        map.put("currency",currency);
        map.put("tradeName",tradeName);
        map.put("remark",remark);
        map.put("tradeTime",tradeTime);
        map.put("singlePrice",singlePrice);
        map.put("quantity",quantity);
        map.put("payerCustName",payerCustName);
        map.put("payeeCustName",payeeCustName);
        map.put("bankNo",bankNo);
        map.put("showUrl",showUrl);
        map.put("merchantLogoUrl",merchantLogoUrl);
        map.put("cashierStyle",cashierStyle);
        map.put("isSplit",isSplit);
        map.put("splitInfo",splitInfo);
        return map;
    }
}
